Konkurensi di Planet Merah adalah seni mengelola beberapa operasi independen—seperti navigasi rover, telemetri tanda kehidupan, dan koneksi satelit—tanpa sistem terhenti. Dalam Go, sebuah tugas yang berjalan secara mandiri dikenal sebagai goroutine.
1. Prinsip Non-Determinisme
Sebaiknya selalu berasumsi bahwa operasi dalam goroutine yang berbeda dapat berjalan dalam urutan apa saja. Karena runtime Go menjadwalkan tugas di inti yang tersedia, kita tidak dapat mengandalkan satu rover menyelesaikan pemindaian sebelum rover lain memulai pengiriman tanpa sinkronisasi eksplisit.
2. Mekanisme Sinkronisasi
Untuk mengelola tugas-tugas ini, Go menyediakan dua alat utama:
- Eksklusi Bersama: Goroutine dapat menggunakan
mutexuntuk mencegah satu sama lain melakukan sesuatu pada saat bersamaan. - Pernyataan Select: Ini terlihat seperti pernyataan switch di mana setiap kasus menyimpan penerimaan atau pengiriman saluran.
selectmenunggu hingga satu kasus siap, lalu menjalankannya.
3. Kerangka Pekerja
Pekerja jangka panjang biasanya menggunakan loop tak hingga yang dikombinasikan dengan select untuk memantau beberapa saluran komunikasi secara bersamaan:
for {
select {
// Tunggu saluran di sini.
}
}
}